iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0
Modern Web

看Roadmap學backend overview系列 第 13

行程間通訊(Interprocess Communication)

  • 分享至 

  • xImage
  •  
tags: 鐵人賽

前言

在系統內,Process或是Thread若需要與其他合作,就須要有溝通的方式,而溝通的原因包括資料分享需要、模組...等等,這些就被稱為行程間通訊。

定義

多個 process/thread 內部要去溝通,都統稱叫做 IPC。

關於這點我曾經有點困惑,為什麼Thread之間的溝通也被稱為行程間通訊,我個人給他的解釋是,因為Thread本身也可以算是一個Process,只是跟其他同Process的Thread共享了部分記憶體空間。

不過說不定只是那時候的人取錯名字了?

情境需要

  • 資訊分享: node.js經過cluster產生的child process和main process需要溝通。
  • 加速運算: Parallel
  • 模組化
  • 方便

類別

  • Shared Memory
  • Message Passing

Shared Memory

共享記憶體以進行通訊,使用時不需要kernel。
不過若是兩個Process之間想要使用這個方式進行通訊會因為需要額外建立共享的memeory區塊而發出system call了。

Message Passing

要實現這個通訊方式,必須包含

  • 溝通方法: send & receive
  • 溝通管道

在有些資料中,雖然會將IPC分為更多類,不過我最後根據inter-process-communication-ipc這份資料,認為理解他們的方式應視為在討論Message Passing實踐時的相異之處。

其中包括討論:

  • 溝通管道如何被建立?
    通常會討論是直接通訊Direct Communication或是間接通訊Indirect Communication。
  • 一個管道是否可以與兩個以上的Process有關?
  • Process與Process之間可以有多少管道?
  • 管道的容量有多少?可容納的訊息是固定還是可變的
  • 管道是雙向還是單向的

小結

看了資料後才發現其實IPC蠻靠近我們的
包括我們在shell裡面常用的pipe

find a | xargs grep 'something'

因為每個指令是一個process,前指令在將結果傳給後指令接收時使用的就是IPC。

另外瀏覽器請求server的通信也是。
不過IPC的細節實在太燒腦了,差點寫不完只好先停在這裡,若之後真的有機會再回頭來更新吧。

同步發布於部落格,歡迎來逛逛~

參考資料

IPC (Interprocess Communication)
inter-process-communication-ip


上一篇
行程(Process)、執行緒(thread)傻傻分不清楚(下)-並發(concurrency)
下一篇
電腦與外界的通訊方式-輸入/輸出(I/O)管理
系列文
看Roadmap學backend overview30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言